﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Services;
using System.Data.SqlClient;
using System.Configuration;
using System.Data;
using DAL.Entity;
using DAL.Persistencia;
using BLL.Utils;
using System.Text.RegularExpressions;

namespace NewTierra.Pages
{
    public partial class AddTarifa : System.Web.UI.Page
    {
        public string corFieldTarifas;

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                //Session["PeriodoIDTarifas"] = "130";
                //Session["Sid"] = "59111";
                ViewState["Sid"] = Session["Sid"];
                PreencheTitulos();
                CarregarDadosTarifas(sender, e, "Nome");
                CarregarDadosMeal(sender, e);
                CarregarDadosPeriodos(sender, e, "DESC");
                popularDrops();
                txtStatusTarifa.Text = "";
                txtStatusTarifaTotal.Text = "";
                txtStatusMeal.Text = "";
                txtStatusMealTotal.Text = "";
                ViewState["TipoTarifa"] = "Apartamento";
            }
        }

        #region Popular Periodos

        protected void CarregarDadosPeriodos(object sender, EventArgs e, string ordem)
        {
            CarregarPeriodos(sender, e, ordem);
        }

        protected void CarregarPeriodos(object sender, EventArgs e, string ordem)
        {
            try
            {
                PeriodosDAL p = new PeriodosDAL();

                Dictionary<string, string> dadosPeriodos = (Dictionary<string, string>)Session["IdsPeriodos"];

                GridTarifasPeriodo.DataSource = p.ListarTodosOrdenado(Convert.ToInt32(Session["Sid"]), Convert.ToInt32(dadosPeriodos["IdMercado"]), Convert.ToInt32(dadosPeriodos["IdBaseTarifaria"]), ordem);
                GridTarifasPeriodo.DataBind();

                if (GridTarifasPeriodo.PageCount > 0)
                {
                    int i = 0;

                    foreach (GridViewRow row in GridTarifasPeriodo.Rows)
                    {
                        if (row.Cells[0].Text == Session["PeriodoIDTarifas"].ToString())
                        {
                            GridTarifasPeriodo.SelectedIndex = i;
                            break;
                        }

                        i++;
                    }
                }

            }
            catch (Exception ex)
            {
                lblMsgAddTarifa.Text = ex.Message;
            }
        }

        public void SortCommandPeriodo(object sender, GridViewSortEventArgs e)
        {
            if (ViewState["ordenarPeriodo"] == "")
            {
                CarregarDadosPeriodos(sender, e, "DESC");
                ViewState["ordenarPeriodo"] = 1;
            }
            else
            {
                CarregarDadosPeriodos(sender, e, "ASC");
                ViewState["ordenarPeriodo"] = "";

            }
        }

        protected void GridTarifasPeriodo_SelectedIndexChanged(object sender, EventArgs e)
        {
            Session["PeriodoIDTarifas"] = GridTarifasPeriodo.SelectedRow.Cells[0].Text;
            CarregarDadosTarifas(sender, e, "Nome");
            CarregarDadosMeal(sender, e);
        }

        #endregion

        #region Popula Dados Tarifas

        protected void popularDrops()
        {
            PopulaDropTipoRoom();
            PopulaDropCategoria();
            PopulaDropTipoTarifa();
            PopulaDropStatusTarif();
            PopulaDropMeal();
            PopulaDropStatusMeal();
        }

        void PopulaDropTipoRoom()
        {
            try
            {
                using (NewTierraEntities n = new NewTierraEntities())
                {
                    DropTipoRoom.DataSource = n.Tipo_Room.ToList();
                    DropTipoRoom.DataValueField = "Tipo_room_id";
                    DropTipoRoom.DataTextField = "Tipo_room_nome";
                    DropTipoRoom.DataBind();
                }

            }
            catch (Exception ex)
            {
                lblMsgAddTarifa.Text = "Erro. " + ex.Message;
            }
        }

        void PopulaDropCategoria()
        {
            try
            {
                TarifaDAL t = new TarifaDAL();
                TarifCategoriaDAL tc = new TarifCategoriaDAL();

                using (NewTierraEntities Con = new NewTierraEntities())
                {
                    if (!t.VerificaTarifaExistente(Convert.ToInt32(Session["PeriodoIDTarifas"])))
                    {
                        DropCategoria.DataSource = tc.ListarTodos();
                        DropCategoria.DataValueField = "Tarif_categoria_id";
                        DropCategoria.DataTextField = "Tarif_categoria_nome";
                        DropCategoria.DataBind();
                    }
                    else
                    {
                        DropCategoria.DataSource = tc.ListarTodosJaCadastrados(Convert.ToInt32(Session["PeriodoIDTarifas"]));
                        DropCategoria.DataValueField = "Tarif_categoria_id";
                        DropCategoria.DataTextField = "Tarif_categoria_nome";
                        DropCategoria.DataBind();
                    }    
                }
                
            }
            catch (Exception ex)
            {
                lblMsgAddTarifa.Text = "Erro. " + ex.Message;
            }
        }

        void PopulaDropTipoTarifa()
        {
            try
            {
                using (NewTierraEntities n = new NewTierraEntities())
                {
                    DropTipoTarifa.DataSource = n.S_Mercado_Tipo_Tarifa.ToList();
                    DropTipoTarifa.DataValueField = "S_mercado_tipo_tarifa_id";
                    DropTipoTarifa.DataTextField = "S_mercado_tipo_tarifa_nome";
                    DropTipoTarifa.DataBind();
                }
            }
            catch (Exception ex)
            {
                lblMsgAddTarifa.Text = "Erro. " + ex.Message;
            }
        }

        void PopulaDropStatusTarif()
        {
            try
            {
                using (NewTierraEntities n = new NewTierraEntities())
                {
                    DropStatusTarif.DataSource = n.S_Mercado_Tarifa_Status.ToList();
                    DropStatusTarif.DataValueField = "S_mercado_tarifa_status_id";
                    DropStatusTarif.DataTextField = "S_mercado_tarifa_status_nome";
                    DropStatusTarif.DataBind();
                }
            }
            catch (Exception ex)
            {
                lblMsgAddTarifa.Text = "Erro. " + ex.Message;
            }
        }

        protected void CarregarDadosTarifas(object sender, EventArgs e, string ordem)
        {
            CarregarTarifas(sender, e, ordem);
            //MergeCells();
        }

        protected void CarregarTarifas(object sender, EventArgs e, string ordem)
        {
            try
            {
                TarifaDAL t = new TarifaDAL();

                GridTarifas.DataSource = t.ListarTodosOrdenado(Convert.ToInt32(Session["PeriodoIDTarifas"]), ordem);
                GridTarifas.DataBind(); //Desenhar
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }
        }

        public void SortCommandTarifa(object sender, GridViewSortEventArgs e)
        {
            if (ViewState["ordenarTarifa"] == "")
            {
                CarregarDadosTarifas(sender, e, "Nome");
                ViewState["ordenarTarifa"] = 1;
            }
            else
            {
                CarregarDadosTarifas(sender, e, "Preco");
                ViewState["ordenarTarifa"] = "";

            }
        }

        protected void PaginarDadosTarifas(object sender, GridViewPageEventArgs e)
        {
            //Realiza a paginação
            GridTarifas.PageIndex = e.NewPageIndex;
            CarregarDadosTarifas(sender, e, "Nome"); //Atualizar os dados do GridView
        }

        #endregion

        #region Popula Dados Meal

        void PopulaDropMeal()
        {
            try
            {
                using (NewTierraEntities n = new NewTierraEntities())
                {
                    DropMeal.DataSource = n.S_Meal.ToList();
                    DropMeal.DataValueField = "S_meal_id";
                    DropMeal.DataTextField = "S_meal_nome";
                    DropMeal.DataBind();
                }

            }
            catch (Exception ex)
            {
                lblMsgAddTarifa.Text = "Erro. " + ex.Message;
            }
        }

        void PopulaDropStatusMeal()
        {
            try
            {
                using (NewTierraEntities n = new NewTierraEntities())
                {
                    DropStatusMeal.DataSource = n.S_Mercado_Tarifa_Status.ToList();
                    DropStatusMeal.DataValueField = "S_mercado_tarifa_status_id";
                    DropStatusMeal.DataTextField = "S_mercado_tarifa_status_nome";
                    DropStatusMeal.DataBind();
                }
            }
            catch (Exception ex)
            {
                lblMsgAddTarifa.Text = "Erro. " + ex.Message;
            }
        }

        protected void CarregarDadosMeal(object sender, EventArgs e)
        {
            CarregarMeal(sender, e);
        }

        protected void CarregarMeal(object sender, EventArgs e)
        {
            try
            {
                MealDAL m = new MealDAL();

                GridMeal.DataSource = m.ListarTodos(Convert.ToInt32(Session["PeriodoIDTarifas"]));
                GridMeal.DataBind(); //Desenhar
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }
        }

        protected void PaginarDadosMeal(object sender, GridViewPageEventArgs e)
        {
            //Realiza a paginação
            GridMeal.PageIndex = e.NewPageIndex;
            CarregarDadosMeal(sender, e); //Atualizar os dados do GridView
        }

        #endregion

        #region Regras Tarifas
        
        protected void chkValor_CheckedChanged(object sender, EventArgs e)
        {
            DropStatusTarif.Visible=true;
            txtStatusTarifa.Visible=false;
            chkValor.Visible=false;
            lnkVoltarStatus.Visible = true;
            lblTotalTarifaTXT.Visible = false;
            txtStatusTarifaTotal.Visible = false;
            txtPorcentagemTaxa.Enabled = false;
            txtPorcentagemImposto.Enabled = false;
            txtStatusTarifa.Text = "";
            txtStatusTarifaTotal.Text = "";
            txtPorcentagemImposto.Text = "0";
            txtPorcentagemTaxa.Text = "0";
            PanelPorcentagemTarifas.Visible = false;
            requiredTarifa.Enabled = false;
        }

        protected void lnkVoltarStatus_Click(object sender, EventArgs e)
        {
            DropStatusTarif.Visible = false;
            txtStatusTarifa.Visible=true;
            txtStatusTarifaTotal.Visible = true;
            lblTotalTarifaTXT.Visible = true;
            chkValor.Visible=true;
            chkValor.Checked=false;
            lnkVoltarStatus.Visible=false;
            txtStatusTarifa.Text="";
            txtPorcentagemTaxa.Enabled = true;
            txtPorcentagemImposto.Enabled = true;
            PanelPorcentagemTarifas.Visible = true;
            requiredTarifa.Enabled = true;
        }

        protected void txtPorcentagemTaxa_TextChanged(object sender, EventArgs e)
        {

            if (!txtStatusTarifa.Text.Equals("") && !txtStatusTarifa.Text.Equals(""))
            {
                if (!txtPorcentagemTaxa.Equals(""))
                {
                    double valortarifa = Convert.ToDouble(txtStatusTarifa.Text);
                    double valortotalComTaxa = (valortarifa * Convert.ToDouble(txtPorcentagemTaxa.Text)) / 100;

                    double d = Convert.ToDouble(valortarifa + valortotalComTaxa);
                    txtStatusTarifaTotal.Text = d.ToString("N2");

                    double valortarifa2 = Convert.ToDouble(txtStatusTarifaTotal.Text);
                    double valortotalComImposto = (valortarifa2 * Convert.ToDouble(txtPorcentagemImposto.Text)) / 100;

                    double d2 = Convert.ToDouble(valortarifa2 + valortotalComImposto);
                    txtStatusTarifaTotal.Text = d2.ToString("N2");
                }
                else
                {
                    txtStatusTarifa.Text = "";
                }
            }
            else
            {
                lblMsgAddTarifa.Text = "Favor digitar o valor da tarifa antes das taxas.";
            }
       }

        //protected void txtPorcentagemImposto_TextChanged(object sender, EventArgs e)
        //{

        //    if (!txtStatusTarifa.Text.Equals(""))
        //    {
        //        //txtPorcentagemTaxa_TextChanged(sender, e);
        //        double valortarifa = Convert.ToDouble(txtStatusTarifaTotal.Text);
        //        double valortotalComImposto = (valortarifa * Convert.ToDouble(txtPorcentagemImposto.Text)) / 100;

        //        double d = Convert.ToDouble(valortarifa + valortotalComImposto);
        //        txtStatusTarifaTotal.Text = d.ToString("N2");
        //    }
        //    else
        //    {
        //        lblMsgAddTarifa.Text = "Favor digitar o valor da tarifa antes das taxas.";
        //    }
        //}

        protected void txtStatusTarifa_TextChanged(object sender, EventArgs e)
        {
            Utils u = new Utils();

            if (txtStatusTarifa.Text != "")
            {
                if (ViewState["TipoTarifa"].Equals("Apartamento"))
                {
                    switch (Convert.ToString(DropTipoRoom.SelectedItem))
                    {
                        case "Single" :
                            ViewState["ValorSemDivisao"] = null;
                            txtStatusTarifa.ToolTip = "";
                            break;

                        case "Double":
                            ViewState["ValorSemDivisao"] = txtStatusTarifa.Text;
                            txtStatusTarifa.ToolTip = ViewState["ValorSemDivisao"].ToString();
                            double valorD = Convert.ToDouble(txtStatusTarifa.Text) / 2;
                            txtStatusTarifa.Text = valorD.ToString("N2");
                            break;

                        case "Triple":
                            ViewState["ValorSemDivisao"] = txtStatusTarifa.Text;
                            txtStatusTarifa.ToolTip = ViewState["ValorSemDivisao"].ToString();
                            double valorT = Convert.ToDouble(txtStatusTarifa.Text) / 3;
                            txtStatusTarifa.Text = valorT.ToString("N2");
                            break;

                        case "Quadruple":
                            ViewState["ValorSemDivisao"] = txtStatusTarifa.Text;
                            txtStatusTarifa.ToolTip = ViewState["ValorSemDivisao"].ToString();
                            double valorQ = Convert.ToDouble(txtStatusTarifa.Text) / 4;
                            txtStatusTarifa.Text = valorQ.ToString("N2");
                            break;
                    }
                }
            }

            if(txtStatusTarifa.Text != "")
            {
                if (u.ValidaNumeroComVirgula(txtStatusTarifa.Text))
                {
                    txtPorcentagemTaxa_TextChanged(sender, e);
                    //txtPorcentagemImposto_TextChanged(sender, e);
                    lblErroStatusValorTarifa.Text = "";
                }
                else
                {
                    lblErroStatusValorTarifa.Text = "Digitar somente números.";
                    lblErroStatusValorTarifa.ForeColor = System.Drawing.Color.Red;
                }
            }
        }

        protected void txtComissao_TextChanged(object sender, EventArgs e)
        {
            if (txtStatusTarifa.Text != "")
            {
                txtPorcentagemTaxa_TextChanged(sender, e);
                //txtPorcentagemImposto_TextChanged(sender, e);

                double valortarifa = Convert.ToDouble(txtStatusTarifa.Text);
                double valortotalComComissao = (valortarifa * Convert.ToDouble(txtComissao.Text)) / 100;

                double d = Convert.ToDouble(Convert.ToDouble(txtStatusTarifaTotal.Text) - valortotalComComissao);
                txtStatusTarifaTotal.Text = d.ToString("N2");
            } 
            else
            {
                lblMsgAddTarifa.Text = "Favor digitar o valor da tarifa antes das taxas.";
            }
        }

        protected void RdoTarifa_SelectedIndexChanged(object sender, EventArgs e)
        {            

            if (RdoTarifa.SelectedValue.Equals("1"))
            {
                ViewState["TipoTarifa"] = "Apartamento";
                txtStatusTarifa_TextChanged(sender, e);
            }
            else
            {
                ViewState["TipoTarifa"] = "";
                ViewState["ValorSemDivisao"] = null;
                txtStatusTarifa.ToolTip = "";
                txtStatusTarifa_TextChanged(sender, e);
            }
        }

        protected void DropTipoRoom_SelectedIndexChanged(object sender, EventArgs e)
        {
           // RdoTarifa_SelectedIndexChanged(sender, e);
            txtStatusTarifa_TextChanged(sender, e);
        }

        protected void SalvarTarifa(object sender, EventArgs e)
        {
          try 
	        {	        
              //Começa processo cadastro da tarifa
                S_Mercado_Tarifa mt = new S_Mercado_Tarifa();

              //Verifica se algum periodo foi selecionado
                if (Session["PeriodoIDTarifas"] == null)
                {
                    lblMsgAddTarifa.Text = "Favor selecionar periodo.";
                    return;
                }

              //Verifica se é valor ou status tarifa
                if (txtStatusTarifa.Text != "")
                {
                    mt.S_merc_tarif_tarifa = Convert.ToDecimal(txtStatusTarifa.Text);
                    mt.S_merc_tarif_tarifa_total = Convert.ToDecimal(txtStatusTarifaTotal.Text);
                    mt.S_merc_tarif_porc_taxa = Convert.ToInt32(txtPorcentagemTaxa.Text);
                    mt.S_merca_tarif_porc_imposto = Convert.ToInt32(txtPorcentagemImposto.Text);
                    mt.S_merca_tarif_porc_comissao = Convert.ToInt32(txtComissao.Text);

                    if (txtStatusTarifa.Text == "")
                    {
                        lblMsgAddTarifa.Text = "Favor informar a tarifa.";
                        return;
                    }
                }
                else
                {
                    mt.S_merc_tarif_status_id = Convert.ToInt32(DropStatusTarif.SelectedValue);
                }

              
                    mt.Tipo_room_id = Convert.ToInt32(DropTipoRoom.SelectedValue);
                    mt.Tarif_categoria_id = Convert.ToInt32(DropCategoria.SelectedValue);
                    mt.S_mercado_tipo_tarifa_id = Convert.ToInt32(DropTipoTarifa.SelectedValue);
                    mt.S_merc_periodo_id = Convert.ToInt32(Session["PeriodoIDTarifas"]);

            MercadoTarifaDAL mtd = new MercadoTarifaDAL();

            if(!mtd.VerificaTarifaCadastrada(mt))
            {
                //Salva tarifa
                mtd.Salvar(mt);
                lblMsgAddTarifa.Text = "Cadastro efetuado com sucesso.";
            }
              else
            {
                lblMsgAddTarifa.Text = "Tarifa já cadastrada, tente outra.";
                return;
            }

            CarregarDadosTarifas(sender, e, "Nome");
            }
            catch (Exception ex)
            {
                lblMsgAddTarifa.Text = ("Erro: " + ex.Message);
            }
         }

        protected void AtualizarTarifa(object sender, EventArgs e)
        {
            try
            {

                S_Mercado_Tarifa mt = new S_Mercado_Tarifa();

                if (ViewState["IdTarifa"] != null)
                {
                    mt.S_merc_tarif_id = Convert.ToInt32(ViewState["IdTarifa"]);
                }
                else
                {
                    lblMsgAddTarifa.Text = "Selecione uma tarifa para atualizar.";
                    return;
                }

                if (txtStatusTarifa.Text != "")
                {
                    mt.S_merc_tarif_tarifa = Convert.ToDecimal(txtStatusTarifa.Text);
                    mt.S_merc_tarif_tarifa_total = Convert.ToDecimal(txtStatusTarifaTotal.Text);
                    mt.S_merc_tarif_porc_taxa = Convert.ToInt32(txtPorcentagemTaxa.Text);
                    mt.S_merca_tarif_porc_imposto = Convert.ToInt32(txtPorcentagemImposto.Text);
                    mt.S_merca_tarif_porc_comissao = Convert.ToInt32(txtComissao.Text);

                    if (txtStatusTarifa.Text == "")
                    {
                        lblMsgAddTarifa.Text = "Favor informar a tarifa.";
                        return;
                    }
                }
                else
                {
                    mt.S_merc_tarif_status_id = Convert.ToInt32(DropStatusTarif.SelectedValue);
                }


                mt.Tipo_room_id = Convert.ToInt32(DropTipoRoom.SelectedValue);
                mt.Tarif_categoria_id = Convert.ToInt32(DropCategoria.SelectedValue);
                mt.S_mercado_tipo_tarifa_id = Convert.ToInt32(DropTipoTarifa.SelectedValue);
                mt.S_merc_periodo_id = Convert.ToInt32(Session["PeriodoIDTarifas"]);

                TarifaDAL s = new TarifaDAL();

                s.Atualizar(mt);
                lblMsgAddTarifa.Text = "Tarifa atualizada com sucesso.";
                CarregarDadosTarifas(sender, e, "Nome");
            }
            catch (Exception ex)
            {
                lblMsgAddTarifa.Text = "Erro. " + ex.Message;
            }
        }

        protected void ExcluirTarifa(object sender, EventArgs e)
        {
            try
            {
                if (ViewState["IdTarifa"] != null)
                {
                    TarifaDAL t = new TarifaDAL();
                    S_Mercado_Tarifa s = t.ObterPorId(Convert.ToInt32(ViewState["IdTarifa"]));
                    t.Excluir(s);
                    lblMsgAddTarifa.Text = "Tarifa excluída com sucesso.";
                    CarregarDadosTarifas(sender, e, "Nome");
                }
                else
                {
                    lblMsgAddTarifa.Text = "Selecione uma tarifa para excluir.";
                }
            }
            catch (Exception ex)
            {
                lblMsgAddTarifa.Text = "Erro. " + ex.Message;
            }
        }

        protected void GridTarifas_SelectedIndexChanged(object sender, EventArgs e)
        {
            ViewState["IdTarifa"] = GridTarifas.SelectedRow.Cells[0].Text;

            BuscaTarifa(sender, e, Convert.ToInt32(GridTarifas.SelectedRow.Cells[0].Text));

            lblMsgAddTarifa.Text = "";
        }

        protected void BuscaTarifa(object sender, EventArgs e, int tarifaID)
        {
            try
            {

                TarifaDAL t = new TarifaDAL();

                S_Mercado_Tarifa mt = t.ObterPorId(tarifaID);

                if (mt.S_merc_tarif_tarifa != null)
                {
                    lnkVoltarStatus_Click(sender, e);
                    txtStatusTarifa.Text = Convert.ToString(mt.S_merc_tarif_tarifa);
                    txtStatusTarifaTotal.Text = Convert.ToString(mt.S_merc_tarif_tarifa_total);

                    if (mt.S_merca_tarif_porc_imposto == null)
                    {
                        txtPorcentagemImposto.Text = "0";
                    }
                    else
                    {
                        txtPorcentagemImposto.Text = Convert.ToString(mt.S_merca_tarif_porc_imposto);
                    }

                    if (mt.S_merc_tarif_porc_taxa == null)
                    {
                        txtPorcentagemTaxa.Text = "0";
                    }
                    else
                    {
                        txtPorcentagemTaxa.Text = Convert.ToString(mt.S_merc_tarif_porc_taxa);
                    }

                    if (mt.S_merca_tarif_porc_comissao == null)
                    {
                        txtComissao.Text = "0";
                    }
                    else
                    {
                        txtComissao.Text = Convert.ToString(mt.S_merca_tarif_porc_comissao);
                    }
                }
                else
                {
                    DropStatusTarif.SelectedValue = Convert.ToString(mt.S_merc_tarif_status_id);
                    chkValor_CheckedChanged(sender, e);
                }


                DropCategoria.SelectedValue = Convert.ToString(mt.Tarif_categoria_id);
                DropTipoRoom.SelectedValue = Convert.ToString(mt.Tipo_room_id);
                DropTipoTarifa.SelectedValue = Convert.ToString(mt.S_mercado_tipo_tarifa_id);

            }
            catch (Exception ex)
            {
                lblMsgAddTarifa.Text = ex.Message;
            }
        }

        protected void AddCategoria(object sender, EventArgs e)
        {
            DropCategoria.Visible = false;
            txtAddCategoria.Visible = true;
            btnAddCategoria.Visible = true;
        }

        protected void SelectCategoria(object sender, EventArgs e)
        {
            TarifCategoriaDAL t = new TarifCategoriaDAL();

            Tarif_Categoria tc = t.ObterPorNome(txtAddCategoria.Text);

            //for (int i = 0; i < DropCategoria.Items.Count; i++)
            //{
            //    if (DropCategoria.Items[i].ToString() == tc.Tarif_categoria_id.ToString())
            //    {
            //        DropCategoria.SelectedIndex = i;
            //        DropCategoria.SelectedValue = Convert.ToString(tc.Tarif_categoria_id);
            //        break;
                    
            //    }
            //    else
            //    {
            //        DropCategoria.Items.Insert(0, new ListItem(tc.Tarif_categoria_nome, Convert.ToString(tc.Tarif_categoria_id)));
            //        break;
            //    }
            //}

            DropCategoria.Items.Insert(0, new ListItem(tc.Tarif_categoria_nome, Convert.ToString(tc.Tarif_categoria_id)));
            DropCategoria.SelectedValue = Convert.ToString(tc.Tarif_categoria_id);
            DropCategoria.Visible = true;
            txtAddCategoria.Text = "";
            txtAddCategoria.Visible = false;
            btnAddCategoria.Visible = false;
        }

        protected void SalvarCategoria(object sender, EventArgs e)
        {
            try
            {
                Tarif_Categoria t = new Tarif_Categoria();
                TarifCategoriaDAL tc = new TarifCategoriaDAL();

                if(txtAddCategoria.Text.Equals(""))
                {
                    lblMsgAddTarifa.Text = "Nenhuma categoria foi escrita ou selecionada.";
                    return;
                }

                if(!tc.VerificaExistente(txtAddCategoria.Text))
                {
                    t.Tarif_categoria_nome = txtAddCategoria.Text;
                    tc.Salvar(t);
                    lblMsgAddTarifa.Text = "Categoria cadastrada com sucesso.";
                    txtAddCategoria.Visible = false;
                    btnAddCategoria.Visible = false;
                    DropCategoria.Visible = true;
                    SelectCategoria(sender, e);
                    txtAddCategoria.Text = "";
                }
                else
                {
                    lblMsgAddTarifa.Text = "Categoria já existente, tente outra.";
                    return;
                }

            }
            catch (Exception ex)
            {
                lblMsgAddTarifa.Text = ex.Message;
            }
        }

        [WebMethod]
        public static List<string> SearchCategorias(string prefixText)
        {
            try
            {
                TarifCategoriaDAL t = new TarifCategoriaDAL();
                List<Tarif_Categoria> tc = t.ListarTodos(prefixText);

                List<string> lista = new List<string>();

                foreach (Tarif_Categoria p in tc)
                {
                    lista.Add(p.Tarif_categoria_nome);
                }
                
                return lista;
            }
            catch
            {
                throw;
            }  
         }

        #endregion

        #region Regras Meal

        protected void chkValorMeal_CheckedChanged(object sender, EventArgs e)
        {
            DropStatusMeal.Visible = true;
            txtStatusMeal.Visible = false;
            chkValorMeal.Visible = false;
            lnkVoltarStatusMeal.Visible = true;
            lblTotalMealTXT.Visible = false;
            txtStatusMealTotal.Visible = false;
            txtPorcentagemTaxaMeal.Enabled = false;
            txtPorcentagemImpostoMeal.Enabled = false;
            txtStatusMeal.Text = "";
            txtStatusMealTotal.Text = "";
            txtPorcentagemImpostoMeal.Text = "0";
            txtPorcentagemTaxaMeal.Text = "0";
            PanelPorcentagemMeal.Visible = false;
            requiredStatusMeal.Enabled = false;
        }

        protected void lnkVoltarStatusMeal_Click(object sender, EventArgs e)
        {
            DropStatusMeal.Visible = false;
            txtStatusMeal.Visible = true;
            txtStatusMealTotal.Visible = true;
            lblTotalMealTXT.Visible = true;
            chkValorMeal.Visible = true;
            chkValorMeal.Checked = false;
            lnkVoltarStatusMeal.Visible = false;
            txtStatusMeal.Text = "";
            txtPorcentagemTaxaMeal.Enabled = true;
            txtPorcentagemImpostoMeal.Enabled = true;
            PanelPorcentagemMeal.Visible = true;
            requiredStatusMeal.Enabled = true;
        }

        protected void txtPorcentagemTaxaMeal_TextChanged(object sender, EventArgs e)
        {
            if (!txtPorcentagemTaxaMeal.Equals(""))
            {
                double valortarifa = Convert.ToDouble(txtStatusMeal.Text);
                double valortotalComTaxa = (valortarifa * Convert.ToDouble(txtPorcentagemTaxaMeal.Text)) / 100;

                double d = Convert.ToDouble(valortarifa + valortotalComTaxa);
                txtStatusMealTotal.Text = d.ToString("N2");
            }
            else
            {
                txtPorcentagemTaxaMeal.Text = "";
            }
        }

        protected void txtPorcentagemImpostoMeal_TextChanged(object sender, EventArgs e)
        {
            txtPorcentagemTaxaMeal_TextChanged(sender, e);
            double valortarifa = Convert.ToDouble(txtStatusMealTotal.Text);
            double valortotalComImposto = (valortarifa * Convert.ToDouble(txtPorcentagemImpostoMeal.Text)) / 100;

            double d = Convert.ToDouble(valortarifa + valortotalComImposto);
            txtStatusMealTotal.Text = d.ToString("N2");
        }

        protected void txtStatusMeal_TextChanged(object sender, EventArgs e)
        {
            Utils u = new Utils();

            if (u.ValidaNumeroComVirgula(txtStatusMeal.Text))
            {
                txtPorcentagemTaxaMeal_TextChanged(sender, e);
                txtPorcentagemImpostoMeal_TextChanged(sender, e);
                lblErroStatusValorMeal.Text = "";
            }
            else
            {
                lblErroStatusValorMeal.Text = "Digitar somente números.";
                lblErroStatusValorMeal.ForeColor = System.Drawing.Color.Red;
            }

        }

        protected void SalvarMeal(object sender, EventArgs e)
        {
            try
            {
                S_Mercado_Meal sm = new S_Mercado_Meal();

                if (Session["PeriodoIDTarifas"] == null)
                {
                    lblMsgAddMeal.Text = "Favor selecionar periodo.";
                    return;
                }

                if (txtStatusMeal.Text != "")
                {
                    sm.S_merc_meal_tarifa = Convert.ToDecimal(txtStatusMeal.Text);
                    sm.S_merc_meal_tarifa_total = Convert.ToDecimal(txtStatusMealTotal.Text);
                    sm.S_merca_meal_porc_imposto = Convert.ToInt32(txtPorcentagemImpostoMeal.Text);
                    sm.S_merc_meal_porc_taxa = Convert.ToInt32(txtPorcentagemTaxaMeal.Text);
                    if (txtStatusMeal.Text == "")
                    {
                        lblMsgAddMeal.Text = "Favor informar a tarifa.";
                        return;
                    }
                }
                else
                {
                    sm.S_merc_tarif_status_id = Convert.ToInt32(DropStatusMeal.SelectedValue);
                }

                sm.S_meal_id = Convert.ToInt32(DropMeal.SelectedValue);
                sm.S_merc_periodo_id = Convert.ToInt32(Session["PeriodoIDTarifas"]);


                MealDAL ml = new MealDAL();

                if (!ml.VerificaMealCadastrado(sm))
                {
                    ml.Salvar(sm);
                    lblMsgAddMeal.Text = "Cadastro efetuado com sucesso.";
                }
                else
                {
                    lblMsgAddMeal.Text = "Meal já cadastrado, tente outro.";
                }

                CarregarDadosMeal(sender, e);
            }
            catch (Exception ex)
            {
                lblMsgAddMeal.Text = ex.Message;
            }
        }

        protected void AtualizarMeal(object sender, EventArgs e)
        {

            try
            {

                S_Mercado_Meal sm = new S_Mercado_Meal();

                if (ViewState["IdMeal"] != null)
                {
                    sm.S_merc_meal_id = Convert.ToInt32(ViewState["IdMeal"]);
                }
                else
                {
                    lblMsgAddMeal.Text = "Selecione um meal para ser atualizado.";
                    return;
                }

                if (Session["PeriodoIDTarifas"] == null)
                {
                    lblMsgAddMeal.Text = "Favor selecionar periodo.";
                    return;
                }

                if (txtStatusMeal.Text != "")
                {
                    sm.S_merc_meal_tarifa = Convert.ToDecimal(txtStatusMeal.Text);
                    sm.S_merc_meal_tarifa_total = Convert.ToDecimal(txtStatusMealTotal.Text);
                    sm.S_merca_meal_porc_imposto = Convert.ToInt32(txtPorcentagemImposto.Text);
                    sm.S_merc_meal_porc_taxa = Convert.ToInt32(txtPorcentagemTaxa.Text);
                    if (txtStatusMeal.Text == "")
                    {
                        lblMsgAddMeal.Text = "Favor informar a tarifa.";
                        return;
                    }
                }
                else
                {
                    sm.S_merc_tarif_status_id = Convert.ToInt32(DropStatusMeal.SelectedValue);
                }

                sm.S_meal_id = Convert.ToInt32(DropMeal.SelectedValue);
                sm.S_merc_periodo_id = Convert.ToInt32(Session["PeriodoIDTarifas"]);


                MealDAL ml = new MealDAL();

                ml.Atualizar(sm);

                lblMsgAddMeal.Text = "Meal atualizado com sucesso.";
                CarregarDadosMeal(sender, e);

            }
            catch (Exception ex)
            {
                lblMsgAddMeal.Text = "Erro. " + ex.Message;
            }

        }

        protected void ExcluirMeal(object sender, EventArgs e)
        {
            try
            {
                if (ViewState["IdMeal"] != null)
                {
                    MealDAL m = new MealDAL();
                    S_Mercado_Meal mm = m.ObterPorId(Convert.ToInt32(ViewState["IdMeal"]));
                    m.Excluir(mm);
                    lblMsgAddMeal.Text = "Meal excluído com sucesso.";
                    CarregarDadosMeal(sender, e);
                }
                else
                {
                    lblMsgAddMeal.Text = "Selecione um meal para excluir.";
                }


            }
            catch (Exception ex)
            {
                lblMsgAddMeal.Text = "Erro. " + ex.Message;
            }
        }

        protected void GridMeal_SelectedIndexChanged(object sender, EventArgs e)
        {
            ViewState["IdMeal"] = GridMeal.SelectedRow.Cells[0].Text;

            BuscaMeal(sender, e, Convert.ToInt32(GridMeal.SelectedRow.Cells[0].Text));

            lblMsgAddMeal.Text = "";
        }

        protected void BuscaMeal(object sender, EventArgs e, int MercadoMealID)
        {
            try
            {

                MealDAL t = new MealDAL();

                S_Mercado_Meal mt = t.ObterPorId(MercadoMealID);

                if (mt.S_merc_meal_tarifa != null)
                {
                    lnkVoltarStatusMeal_Click(sender, e);
                    txtStatusMeal.Text = Convert.ToString(mt.S_merc_meal_tarifa);
                    txtStatusMealTotal.Text = Convert.ToString(mt.S_merc_meal_tarifa_total);

                    if (mt.S_merca_meal_porc_imposto == null)
                    {
                        txtPorcentagemImpostoMeal.Text = "0";
                    }
                    else
                    {
                        txtPorcentagemImpostoMeal.Text = Convert.ToString(mt.S_merca_meal_porc_imposto);
                    }

                    if (mt.S_merc_meal_porc_taxa == null)
                    {
                        txtPorcentagemTaxaMeal.Text = "0";
                    }
                    else
                    {
                        txtPorcentagemTaxaMeal.Text = Convert.ToString(mt.S_merc_meal_porc_taxa);
                    }
                }
                else
                {
                    DropStatusMeal.SelectedValue = Convert.ToString(mt.S_merc_tarif_status_id);
                    chkValorMeal_CheckedChanged(sender, e);
                }


                DropMeal.SelectedValue = Convert.ToString(mt.S_meal_id);

            }
            catch (Exception ex)
            {
                lblMsgAddMeal.Text = "Erro. " + ex.Message;
            }
        }

        #endregion

        #region Regras

        protected void PreencheTitulos()
        {

            Dictionary<string, string> titulos = (Dictionary<string, string>)Session["TitulosTarifas"];

            lblSupplierTarifa.Text = Convert.ToString(Session["Snome"]);
            lblMercado.Text = titulos["Mercado"];
            lblBaseTarifaria.Text = titulos["Base"];
            lblMoeda.Text = titulos["Moeda"];
            
        }

        protected void CriticaSupplierTarifa(object sender, EventArgs e)
        {
            string view, sessao;
            view = ViewState["Sid"].ToString();
            sessao = Session["Sid"].ToString();

            if (view != sessao)
            {
                Response.Redirect("AddTarifa.aspx");
            }
           
        }

        #endregion

    }

}